package com.one.tank;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//设置主界面
public class MainFrame extends JFrame implements ActionListener {
    //设置游戏界面
    private GamePanel gamePanel;

    public MainFrame() {//构造方法
        try {
            //设置字体
            Font font = new Font("微软雅黑", Font.PLAIN, 12);
            //设置菜单
            JMenuBar mainMenu = new JMenuBar();
            JMenu game = new JMenu("游戏");
            game.setFont(font);
            JMenuItem startItem = new JMenuItem("开始");
            startItem.setFont(font);
            // 为窗口增加新游戏菜单的事件监听
            startItem.addActionListener(this);
            //区分用户点击的是哪个菜单，给菜单项设置一个命令-->每个菜单项的命令不同
            startItem.setActionCommand("start");
            game.add(startItem);
            JMenuItem gradeItem = new JMenuItem("选关卡");
            gradeItem.setFont(font);
            // 为窗口增加新游戏菜单的事件监听
            gradeItem.addActionListener(this);
            //区分用户点击的是哪个菜单，给菜单项设置一个命令-->每个菜单项的命令不同
            gradeItem.setActionCommand("grade");
            game.add(gradeItem);
            //加上菜单分隔符
            game.addSeparator();
            JMenuItem exitItem = new JMenuItem("退出");
            exitItem.setFont(font);
            // 为窗口增加新游戏菜单的事件监听
            exitItem.addActionListener(this);
            //区分用户点击的是哪个菜单，给菜单项设置一个命令-->每个菜单项的命令不同
            exitItem.setActionCommand("exit");
            game.add(exitItem);
            mainMenu.add(game);
            JMenu help = new JMenu("帮助");
            help.setFont(font);
            JMenuItem aboutItem = new JMenuItem("关于");
            aboutItem.setFont(font);
            // 为窗口增加新游戏菜单的事件监听
            aboutItem.addActionListener(this);
            //区分用户点击的是哪个菜单，给菜单项设置一个命令-->每个菜单项的命令不同
            aboutItem.setActionCommand("about");
            help.add(aboutItem);
            mainMenu.add(help);
            this.setJMenuBar(mainMenu);

            //创建游戏界面
            gamePanel = new GamePanel();
            this.add(this.gamePanel);

            //设置主面板框架的标题
            this.setTitle("坦克大战");
            //清空布局管理器
            this.setLayout(null);
            //根据游戏面板的大小来设置主面板框架的宽度和高度
            this.setSize(this.gamePanel.getWidth() + 10, this.gamePanel.getHeight() + 60);
            //设置不可缩放
            this.setResizable(false);
            //设置居中
            this.setLocationRelativeTo(null);
            //设置主面板框架的关闭方式
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //设置面板可见
            this.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, "程序出现异常错误，即将退出！\r\n\r\n" + e.toString(), "提示", JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }
    }

    //事件监听处理
    @Override
    public void actionPerformed(ActionEvent e) {
        //监听事件的标识
        String command = e.getActionCommand();
        switch (command) {
            case "start":
                //开始新游戏
                this.gamePanel.newGame();
                break;
            case "grade":
                int gradeCount = GameMap.getGradeCount();
                //选择
                String[] options = new String[gradeCount];
                for (int i = 0; i < gradeCount; i++) {
                    //结尾加一个“”转为字符串
                    options[i] = i + 1 + "";
                }
                String grade = (String) JOptionPane.showInputDialog(this, "请选择你要进行的关卡：", "选关", JOptionPane.INFORMATION_MESSAGE, null, options, options[0]);
                gamePanel.setGrade(Integer.parseInt(grade));
                gamePanel.newGame();
                break;
            case "exit":
                System.exit(0);
                break;
            case "about":
                JOptionPane.showMessageDialog(this, "请寻求客服帮助：1673514145", "提示", JOptionPane.INFORMATION_MESSAGE);
                break;
            default:
                break;
        }
    }
}
